package com.example.heartrateadjuster; /** * This StatisticsActivity is the entry point for the data management module, and it provides three basic functions with which other modules can interface. * @author Nikhil, Revan */ import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.view.Menu; import android.view.View; import org.achartengine.ChartFactory; import org.achartengine.chart.PointStyle; import org.achartengine.model.CategorySeries; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.model.XYSeries; import org.achartengine.renderer.DefaultRenderer; import org.achartengine.renderer.SimpleSeriesRenderer; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; public class StatisticsActivity extends Activity { /** * When the main activity is created, the database is cleared of all records. */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.statistics); } /** * The graphData function is called when the Graph button is pressed; it initiates the activity which graphs the data * @param view The function takes the current view as a parameter since the initiator is a button press. */ public void graphData(View view) { DataAssembler db = new DataAssembler(this); List<Record> temp = db.getAllRecords(); Record first = temp.get(0); int startTime = first.getTimeStamp(); // The time stamp of the first record is the reference point; all other time stamps are calculated relative to this. int count = temp.size(); double[] times = new double[count]; int j = 0; double[] rates = new double[count]; double intConvert; for(Record record : temp) { intConvert = (double)(record.getTimeStamp() - startTime); // get the relative time stamp and cast as double intConvert = intConvert/1000; times[j] = intConvert; System.out.println(times[j]); rates[j] = (double)record.getHeartRate(); j++; } displayLineChart(times,rates); } private void displayLineChart(double[] myTimes, double[] myRates) { // Creating an XYSeries for Heart Rate XYSeries hrSeries = new XYSeries("Heart Rate"); // Adding data to hrSeries for(int i=0;i<myTimes.length;i++){ hrSeries.add(myTimes[i], myRates[i]); } XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); dataset.addSeries(hrSeries); XYSeriesRenderer hrRenderer = new XYSeriesRenderer(); hrRenderer.setColor(Color.GREEN); hrRenderer.setPointStyle(PointStyle.DIAMOND); hrRenderer.setFillPoints(true); hrRenderer.setLineWidth(2); hrRenderer.setDisplayChartValues(true); XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer(); multiRenderer.setXLabels(0); multiRenderer.setChartTitle("Heart Rate vs Time"); multiRenderer.setXTitle("Timestamps (s)"); multiRenderer.setYTitle("Heart Rate"); multiRenderer.setApplyBackgroundColor(true); multiRenderer.setBackgroundColor(Color.BLACK); multiRenderer.setZoomButtonsVisible(true); for(int i = 0; i < myTimes.length;i++) { String label; label = String.valueOf(myTimes[i]); multiRenderer.addXTextLabel(i+1,label); } multiRenderer.addSeriesRenderer(hrRenderer); Intent intent = ChartFactory.getLineChartIntent(getBaseContext(), dataset, multiRenderer); startActivity(intent); }; /** * Generates Pie Chart showing artists * @param view */ public void graphArtist(View view) { DataAssembler db = new DataAssembler(this); HashSet artists = new HashSet(); List<Record> temp = db.getAllRecords(); ArrayList<String> myArtists = new ArrayList<String>(); // has all artists for(Record record : temp) { artists.add(record.getArtist()); myArtists.add(record.getArtist()); } // Convert to an array. Has unique artists String[] uniqueArtists = (String[]) artists.toArray(new String[artists.size()]); double[] frequencies = new double[uniqueArtists.length]; for(int i = 0; i < uniqueArtists.length; i++) { int count = Collections.frequency(myArtists, uniqueArtists[i]); double percentage = (count / ((double)temp.size())) * 100; frequencies[i] = percentage; } int[] colors = {Color.BLUE,Color.GREEN,Color.RED,Color.CYAN,Color.MAGENTA}; CategorySeries distributionSeries = new CategorySeries("Frequencies of Artists"); for(int i = 0; i < frequencies.length;i++) { distributionSeries.add(uniqueArtists[i],frequencies[i]); } DefaultRenderer defaultRenderer = new DefaultRenderer(); for(int i = 0; i < frequencies.length; i++) { SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer(); seriesRenderer.setColor(colors[i%5]); seriesRenderer.setDisplayChartValues(true); defaultRenderer.addSeriesRenderer(seriesRenderer); } defaultRenderer.setLegendTextSize(30); defaultRenderer.setChartTitle("Frequencies of Artists"); defaultRenderer.setChartTitleTextSize(50); defaultRenderer.setZoomButtonsVisible(true); defaultRenderer.setApplyBackgroundColor(true); defaultRenderer.setBackgroundColor(Color.BLACK); defaultRenderer.setDisplayValues(true); Intent intent = ChartFactory.getPieChartIntent(getBaseContext(), distributionSeries, defaultRenderer, "PieChart"); startActivity(intent); } /** * Generate Pie Charts for Song * @param view */ public void graphSong(View view) { DataAssembler db = new DataAssembler(this); HashSet songs = new HashSet(); List<Record> temp = db.getAllRecords(); ArrayList<String> mySongs = new ArrayList<String>(); // has all songs for(Record record : temp) { songs.add(record.getSong()); mySongs.add(record.getSong()); } // Convert to an array. Has unique songs String[] uniqueSongs = (String[]) songs.toArray(new String[songs.size()]); double[] frequencies = new double[uniqueSongs.length]; for(int i = 0; i < uniqueSongs.length; i++) { int count = Collections.frequency(mySongs,uniqueSongs[i]); double percentage = (count / ((double)temp.size())) * 100; frequencies[i] = percentage; } int[] colors = {Color.BLUE,Color.GREEN,Color.RED,Color.CYAN,Color.MAGENTA}; CategorySeries distributionSeries = new CategorySeries("Frequencies of Songs"); for(int i = 0; i < frequencies.length;i++) { distributionSeries.add(uniqueSongs[i],frequencies[i]); } DefaultRenderer defaultRenderer = new DefaultRenderer(); for(int i = 0; i < frequencies.length; i++) { SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer(); seriesRenderer.setColor(colors[i%5]); seriesRenderer.setDisplayChartValues(true); defaultRenderer.addSeriesRenderer(seriesRenderer); } defaultRenderer.setLegendTextSize(30); defaultRenderer.setChartTitle("Frequencies of Songs"); defaultRenderer.setChartTitleTextSize(50); defaultRenderer.setZoomButtonsVisible(true); defaultRenderer.setApplyBackgroundColor(true); defaultRenderer.setBackgroundColor(Color.BLACK); defaultRenderer.setDisplayValues(true); Intent intent = ChartFactory.getPieChartIntent(getBaseContext(), distributionSeries, defaultRenderer, "PieChart"); startActivity(intent); } /** * Generate Pie Charts for Genres * @param view */ public void graphGenre(View view) { DataAssembler db = new DataAssembler(this); HashSet genres = new HashSet(); List<Record> temp = db.getAllRecords(); ArrayList<String> myGenres = new ArrayList<String>(); // has all genres for(Record record : temp) { genres.add(record.getGenre()); myGenres.add(record.getGenre()); } // Convert to an array. Has unique genres String[] uniqueGenres = (String[]) genres.toArray(new String[genres.size()]); double[] frequencies = new double[uniqueGenres.length]; for(int i = 0; i < uniqueGenres.length; i++) { int count = Collections.frequency(myGenres,uniqueGenres[i]); double percentage = (count / ((double)temp.size())) * 100; frequencies[i] = percentage; } int[] colors = {Color.BLUE,Color.GREEN,Color.RED,Color.CYAN,Color.MAGENTA}; CategorySeries distributionSeries = new CategorySeries("Frequencies of Genres"); for(int i = 0; i < frequencies.length;i++) { distributionSeries.add(uniqueGenres[i],frequencies[i]); } DefaultRenderer defaultRenderer = new DefaultRenderer(); for(int i = 0; i < frequencies.length; i++) { SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer(); seriesRenderer.setColor(colors[i%5]); seriesRenderer.setDisplayChartValues(true); defaultRenderer.addSeriesRenderer(seriesRenderer); } defaultRenderer.setLegendTextSize(30); defaultRenderer.setChartTitle("Frequencies of Genres"); defaultRenderer.setChartTitleTextSize(50); defaultRenderer.setZoomButtonsVisible(true); defaultRenderer.setApplyBackgroundColor(true); defaultRenderer.setBackgroundColor(Color.BLACK); defaultRenderer.setDisplayValues(true); Intent intent = ChartFactory.getPieChartIntent(getBaseContext(), distributionSeries, defaultRenderer, "PieChart"); startActivity(intent); } public int getCurrentHR() { DataAssembler db = new DataAssembler(this); List<Record> temp = db.getAllRecords(); Record last = temp.get(temp.size()-1); return temp.getHeartRate(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }